home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1999 July: Mac OS SDK / Dev.CD Jul 99 SDK1.toast / Development Kits / Mac OS / Interfaces&Libraries / Universal / Interfaces / PInterfaces / DateTimeUtils.p < prev    next >
Encoding:
Text File  |  1998-08-17  |  11.3 KB  |  358 lines  |  [TEXT/MPS ]

  1. {
  2.      File:        DateTimeUtils.p
  3.  
  4.      Contains:    International Date and Time Interfaces (previously in TextUtils)
  5.  
  6.      Version:    Technology:    System 7.5
  7.                  Release:    Universal Interfaces 3.2
  8.  
  9.      Copyright:    © 1994-1998 by Apple Computer, Inc., all rights reserved.
  10.  
  11.      Bugs?:        For bug reports, consult the following page on
  12.                  the World Wide Web:
  13.  
  14.                      http://developer.apple.com/bugreporter/
  15.  
  16. }
  17. {$IFC UNDEFINED UsingIncludes}
  18. {$SETC UsingIncludes := 0}
  19. {$ENDC}
  20.  
  21. {$IFC NOT UsingIncludes}
  22.  UNIT DateTimeUtils;
  23.  INTERFACE
  24. {$ENDC}
  25.  
  26. {$IFC UNDEFINED __DATETIMEUTILS__}
  27. {$SETC __DATETIMEUTILS__ := 1}
  28.  
  29. {$I+}
  30. {$SETC DateTimeUtilsIncludes := UsingIncludes}
  31. {$SETC UsingIncludes := 1}
  32.  
  33. {$IFC UNDEFINED __CONDITIONALMACROS__}
  34. {$I ConditionalMacros.p}
  35. {$ENDC}
  36. {$IFC UNDEFINED __MACTYPES__}
  37. {$I MacTypes.p}
  38. {$ENDC}
  39.  
  40.  
  41. {$PUSH}
  42. {$ALIGN MAC68K}
  43. {$LibExport+}
  44.  
  45. {
  46.  
  47.     Here are the current routine names and the translations to the older forms.
  48.     Please use the newer forms in all new code and migrate the older names out of existing
  49.     code as maintainance permits.
  50.     
  51.     New Name                    Old Name(s)
  52.     
  53.     DateString                    IUDatePString IUDateString 
  54.     InitDateCache
  55.     LongDateString                IULDateString
  56.     LongTimeString                IULTimeString
  57.     StringToDate                String2Date
  58.     StringToTime                                
  59.     TimeString                    IUTimeString IUTimePString
  60.     LongDateToSeconds            LongDate2Secs
  61.     LongSecondsToDate            LongSecs2Date
  62.     DateToSeconds                Date2Secs
  63.     SecondsToDate                Secs2Date
  64. }
  65.  
  66.  
  67. CONST
  68.                                                                 {  Toggle results  }
  69.     toggleUndefined                = 0;
  70.     toggleOK                    = 1;
  71.     toggleBadField                = 2;
  72.     toggleBadDelta                = 3;
  73.     toggleBadChar                = 4;
  74.     toggleUnknown                = 5;
  75.     toggleBadNum                = 6;
  76.     toggleOutOfRange            = 7;                            { synonym for toggleErr3 }
  77.     toggleErr3                    = 7;
  78.     toggleErr4                    = 8;
  79.     toggleErr5                    = 9;
  80.  
  81.                                                                 {  Date equates  }
  82.     smallDateBit                = 31;                            { Restrict valid date/time to range of Time global }
  83.     togChar12HourBit            = 30;                            { If toggling hour by char, accept hours 1..12 only }
  84.     togCharZCycleBit            = 29;                            { Modifier for togChar12HourBit: accept hours 0..11 only }
  85.     togDelta12HourBit            = 28;                            { If toggling hour up/down, restrict to 12-hour range (am/pm) }
  86.     genCdevRangeBit                = 27;                            { Restrict date/time to range used by genl CDEV }
  87.     validDateFields                = -1;
  88.     maxDateField                = 10;
  89.  
  90.     eraMask                        = $0001;
  91.     yearMask                    = $0002;
  92.     monthMask                    = $0004;
  93.     dayMask                        = $0008;
  94.     hourMask                    = $0010;
  95.     minuteMask                    = $0020;
  96.     secondMask                    = $0040;
  97.     dayOfWeekMask                = $0080;
  98.     dayOfYearMask                = $0100;
  99.     weekOfYearMask                = $0200;
  100.     pmMask                        = $0400;
  101.     dateStdMask                    = $007F;                        { default for ValidDate flags and ToggleDate TogglePB.togFlags }
  102.  
  103.     eraField                    = 0;
  104.     yearField                    = 1;
  105.     monthField                    = 2;
  106.     dayField                    = 3;
  107.     hourField                    = 4;
  108.     minuteField                    = 5;
  109.     secondField                    = 6;
  110.     dayOfWeekField                = 7;
  111.     dayOfYearField                = 8;
  112.     weekOfYearField                = 9;
  113.     pmField                        = 10;
  114.     res1Field                    = 11;
  115.     res2Field                    = 12;
  116.     res3Field                    = 13;
  117.  
  118.  
  119. TYPE
  120.     LongDateField                        = SignedByte;
  121.  
  122. CONST
  123.     shortDate                    = 0;
  124.     longDate                    = 1;
  125.     abbrevDate                    = 2;
  126.  
  127.  
  128. TYPE
  129.     DateForm                            = SInt8;
  130.  
  131. CONST
  132.                                                                 {  StringToDate status values  }
  133.     fatalDateTime                = $8000;                        {  StringToDate and String2Time mask to a fatal error  }
  134.     longDateFound                = 1;                            {  StringToDate mask to long date found  }
  135.     leftOverChars                = 2;                            {  StringToDate & Time mask to warn of left over characters  }
  136.     sepNotIntlSep                = 4;                            {  StringToDate & Time mask to warn of non-standard separators  }
  137.     fieldOrderNotIntl            = 8;                            {  StringToDate & Time mask to warn of non-standard field order  }
  138.     extraneousStrings            = 16;                            {  StringToDate & Time mask to warn of unparsable strings in text  }
  139.     tooManySeps                    = 32;                            {  StringToDate & Time mask to warn of too many separators  }
  140.     sepNotConsistent            = 64;                            {  StringToDate & Time mask to warn of inconsistent separators  }
  141.     tokenErr                    = $8100;                        {  StringToDate & Time mask for 'tokenizer err encountered'  }
  142.     cantReadUtilities            = $8200;
  143.     dateTimeNotFound            = $8400;
  144.     dateTimeInvalid                = $8800;
  145.  
  146.  
  147. TYPE
  148.     StringToDateStatus                    = INTEGER;
  149.     String2DateStatus                    = INTEGER;
  150.     DateCacheRecordPtr = ^DateCacheRecord;
  151.     DateCacheRecord = PACKED RECORD
  152.         hidden:                    ARRAY [0..255] OF INTEGER;                {  only for temporary use  }
  153.     END;
  154.  
  155.     DateCachePtr                        = ^DateCacheRecord;
  156.     DateTimeRecPtr = ^DateTimeRec;
  157.     DateTimeRec = RECORD
  158.         year:                    INTEGER;
  159.         month:                    INTEGER;
  160.         day:                    INTEGER;
  161.         hour:                    INTEGER;
  162.         minute:                    INTEGER;
  163.         second:                    INTEGER;
  164.         dayOfWeek:                INTEGER;
  165.     END;
  166.  
  167.     LongDateTime                        = SInt64;
  168.     LongDateTimePtr                     = ^LongDateTime;
  169.     LongDateCvtPtr = ^LongDateCvt;
  170.     LongDateCvt = RECORD
  171.         CASE INTEGER OF
  172.         0: (
  173.             c:                    SInt64;
  174.             );
  175.         1: (
  176.             lHigh:                UInt32;
  177.             lLow:                UInt32;
  178.            );
  179.     END;
  180.  
  181.     LongDateRecPtr = ^LongDateRec;
  182.     LongDateRec = RECORD
  183.         CASE INTEGER OF
  184.         0: (
  185.             era:                INTEGER;
  186.             year:                INTEGER;
  187.             month:                INTEGER;
  188.             day:                INTEGER;
  189.             hour:                INTEGER;
  190.             minute:                INTEGER;
  191.             second:                INTEGER;
  192.             dayOfWeek:            INTEGER;
  193.             dayOfYear:            INTEGER;
  194.             weekOfYear:            INTEGER;
  195.             pm:                    INTEGER;
  196.             res1:                INTEGER;
  197.             res2:                INTEGER;
  198.             res3:                INTEGER;
  199.            );
  200.         1: (
  201.             list:                ARRAY [0..13] OF INTEGER;                { Index by LongDateField! }
  202.             );
  203.         2: (
  204.             eraAlt:                INTEGER;
  205.             oldDate:            DateTimeRec;
  206.            );
  207.     END;
  208.  
  209.     DateDelta                            = SInt8;
  210.     TogglePBPtr = ^TogglePB;
  211.     TogglePB = RECORD
  212.         togFlags:                LONGINT;                                { caller normally sets low word to dateStdMask=$7F }
  213.         amChars:                ResType;                                { from 'itl0', but uppercased }
  214.         pmChars:                ResType;                                { from 'itl0', but uppercased }
  215.         reserved:                ARRAY [0..3] OF LONGINT;
  216.     END;
  217.  
  218.     ToggleResults                        = INTEGER;
  219. {
  220.  **************************************************************************************
  221.  *
  222.  * The following functions are new names that work on 68k and PowerPC
  223.  *
  224.  **************************************************************************************
  225. }
  226.  
  227. FUNCTION InitDateCache(theCache: DateCachePtr): OSErr;
  228.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  229.     INLINE $2F3C, $8204, $FFF8, $A8B5;
  230.     {$ENDC}
  231. FUNCTION StringToDate(textPtr: Ptr; textLen: LONGINT; theCache: DateCachePtr; VAR lengthUsed: LONGINT; VAR dateTime: LongDateRec): StringToDateStatus;
  232.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  233.     INLINE $2F3C, $8214, $FFF6, $A8B5;
  234.     {$ENDC}
  235. FUNCTION StringToTime(textPtr: Ptr; textLen: LONGINT; theCache: DateCachePtr; VAR lengthUsed: LONGINT; VAR dateTime: LongDateRec): StringToDateStatus;
  236.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  237.     INLINE $2F3C, $8214, $FFF4, $A8B5;
  238.     {$ENDC}
  239. PROCEDURE IUDateString(dateTime: LONGINT; longFlag: DateForm; VAR result: Str255);
  240.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  241.     INLINE $4267, $A9ED;
  242.     {$ENDC}
  243. PROCEDURE IUTimeString(dateTime: LONGINT; wantSeconds: BOOLEAN; VAR result: Str255);
  244.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  245.     INLINE $3F3C, $0002, $A9ED;
  246.     {$ENDC}
  247. PROCEDURE IUDatePString(dateTime: LONGINT; longFlag: DateForm; VAR result: Str255; intlHandle: Handle);
  248.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  249.     INLINE $3F3C, $000E, $A9ED;
  250.     {$ENDC}
  251. PROCEDURE IUTimePString(dateTime: LONGINT; wantSeconds: BOOLEAN; VAR result: Str255; intlHandle: Handle);
  252.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  253.     INLINE $3F3C, $0010, $A9ED;
  254.     {$ENDC}
  255. PROCEDURE IULDateString(VAR dateTime: LongDateTime; longFlag: DateForm; VAR result: Str255; intlHandle: Handle);
  256.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  257.     INLINE $3F3C, $0014, $A9ED;
  258.     {$ENDC}
  259. PROCEDURE IULTimeString(VAR dateTime: LongDateTime; wantSeconds: BOOLEAN; VAR result: Str255; intlHandle: Handle);
  260.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  261.     INLINE $3F3C, $0016, $A9ED;
  262.     {$ENDC}
  263.  
  264. PROCEDURE LongDateToSeconds({CONST}VAR lDate: LongDateRec; VAR lSecs: LongDateTime);
  265.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  266.     INLINE $2F3C, $8008, $FFF2, $A8B5;
  267.     {$ENDC}
  268. PROCEDURE LongSecondsToDate({CONST}VAR lSecs: LongDateTime; VAR lDate: LongDateRec);
  269.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  270.     INLINE $2F3C, $8008, $FFF0, $A8B5;
  271.     {$ENDC}
  272. FUNCTION ToggleDate(VAR lSecs: LongDateTime; field: LongDateField; delta: DateDelta; ch: INTEGER; {CONST}VAR params: TogglePB): ToggleResults;
  273.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  274.     INLINE $2F3C, $820E, $FFEE, $A8B5;
  275.     {$ENDC}
  276. FUNCTION ValidDate({CONST}VAR vDate: LongDateRec; flags: LONGINT; VAR newSecs: LongDateTime): INTEGER;
  277.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  278.     INLINE $2F3C, $820C, $FFE4, $A8B5;
  279.     {$ENDC}
  280. FUNCTION ReadDateTime(VAR time: UInt32): OSErr;
  281.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  282.     INLINE $205F, $A039, $3E80;
  283.     {$ENDC}
  284. PROCEDURE GetDateTime(VAR secs: UInt32);
  285.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  286.     INLINE $205F, $20B8, $020C;
  287.     {$ENDC}
  288. FUNCTION SetDateTime(time: UInt32): OSErr;
  289.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  290.     INLINE $201F, $A03A, $3E80;
  291.     {$ENDC}
  292. PROCEDURE SetTime({CONST}VAR d: DateTimeRec);
  293.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  294.     INLINE $205F, $A9C7, $A03A;
  295.     {$ENDC}
  296. PROCEDURE GetTime(VAR d: DateTimeRec);
  297.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  298.     INLINE $205F, $2038, $020C, $A9C6;
  299.     {$ENDC}
  300. PROCEDURE DateToSeconds({CONST}VAR d: DateTimeRec; VAR secs: UInt32);
  301. PROCEDURE SecondsToDate(secs: UInt32; VAR d: DateTimeRec);
  302.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  303.     INLINE $205F, $201F, $A9C6;
  304.     {$ENDC}
  305. {
  306.  **************************************************************************************
  307.  *
  308.  * The following provide direct function prototypes for new names for 68k
  309.  *
  310.  **************************************************************************************
  311. }
  312. PROCEDURE DateString(dateTime: LONGINT; longFlag: DateForm; VAR result: Str255; intlHandle: Handle);
  313.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  314.     INLINE $3F3C, $000E, $A9ED;
  315.     {$ENDC}
  316. PROCEDURE TimeString(dateTime: LONGINT; wantSeconds: BOOLEAN; VAR result: Str255; intlHandle: Handle);
  317.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  318.     INLINE $3F3C, $0010, $A9ED;
  319.     {$ENDC}
  320. PROCEDURE LongDateString(VAR dateTime: LongDateTime; longFlag: DateForm; VAR result: Str255; intlHandle: Handle);
  321.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  322.     INLINE $3F3C, $0014, $A9ED;
  323.     {$ENDC}
  324. PROCEDURE LongTimeString(VAR dateTime: LongDateTime; wantSeconds: BOOLEAN; VAR result: Str255; intlHandle: Handle);
  325.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  326.     INLINE $3F3C, $0016, $A9ED;
  327.     {$ENDC}
  328. {$IFC OLDROUTINENAMES }
  329. PROCEDURE LongDate2Secs({CONST}VAR lDate: LongDateRec; VAR lSecs: LongDateTime);
  330.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  331.     INLINE $2F3C, $8008, $FFF2, $A8B5;
  332.     {$ENDC}
  333. PROCEDURE LongSecs2Date(VAR lSecs: LongDateTime; VAR lDate: LongDateRec);
  334.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  335.     INLINE $2F3C, $8008, $FFF0, $A8B5;
  336.     {$ENDC}
  337. PROCEDURE Date2Secs({CONST}VAR d: DateTimeRec; VAR secs: UInt32);
  338. PROCEDURE Secs2Date(secs: UInt32; VAR d: DateTimeRec);
  339.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  340.     INLINE $205F, $201F, $A9C6;
  341.     {$ENDC}
  342. {$ENDC}  {OLDROUTINENAMES}
  343.  
  344.  
  345.  
  346.  
  347.  
  348. {$ALIGN RESET}
  349. {$POP}
  350.  
  351. {$SETC UsingIncludes := DateTimeUtilsIncludes}
  352.  
  353. {$ENDC} {__DATETIMEUTILS__}
  354.  
  355. {$IFC NOT UsingIncludes}
  356.  END.
  357. {$ENDC}
  358.